# INSTALLATION DES LIBRAIRIES R
librairies_req <- c("tidyverse",# Une série de packages pour faciliter la manipulation de données
"readxl", # Pour lire les fichiers excel (Carvalho et al. 2018)
"writexl",# Pour écrire des fichiers excel
"gt",# Pour produire de jolis tableaux
"sf", # Pour faciliter la manipulation de données géographiques
"geodata", # Pour télécharger simplement les frontières administratives
"tmap",# Pour produire de jolies cartes
"wdpar", # Pour télécharger la base d'aires protégées WDPA
"remotes",
"progressr") # Pour importer et analyser des indicateurs de biodiversité
manquantes <- !(librairies_req %in% installed.packages())
if (any(manquantes)) install.packages(librairies_req[manquantes])
# CHARGEMENT DES LIBRAIRIES NÉCESSAIRES AUX PREMIERS TRAVAUX
library(tidyverse)
library(geodata)
library(sf)
library(tmap)
library(wdpar)
library(gt)
library(dplyr)
library(lubridate)
library(tmap)
mapme_version <- installed.packages() %>%
data.frame() %>%
filter(Package == "mapme.biodiversity") %>%
pluck("Built") %>%
ifelse(length(.) == 0, "", .)
if (!("mapme.biodiversity" %in% installed.packages()) & mapme_version != "4.2.3") {
remotes::install_github(
"https://github.com/mapme-initiative/mapme.biodiversity.git")
}
library(mapme.biodiversity)Journées de l’UMI SOURCE
1. OBJECTIFS DE LA FORMATION
Faire des analyses spatiales avec R et notamment :
Travailler avec des données géospatiales open source (base des données sur les aires protégées WPDA)
Croiser ces données spatiales avec des données environnementales, sous la forme d’indicateurs, provenant également d’open data (package mapme.biodiversity)
2. FONCTIONNEMENT DE R STUDIO
A - Interface console
A : Fenêtre d’édition des fichiers source “script” B : Console C : Fenêtre environnement D : Fenêtre multi-onglets
B - Règles de code
Lorsque vous travaillez sur RStudio, il est recommandé de suivre certaines règles de code pour maintenir un code clair, lisible et cohérent.
Voici quelques règles générales à prendre en compte :
Nom des variables : Utilisez des noms de variables descriptifs et significatifs pour améliorer la compréhension du code. Évitez les noms de variables trop courts ou cryptiques. Utilisez des noms en minuscules avec des mots séparés par des underscores pour une meilleure lisibilité.
Commentaires : Utilisez des commentaires pour expliquer des parties complexes du code, des décisions importantes ou pour fournir des informations supplémentaires. Les commentaires aident à comprendre le code plus facilement, en particulier pour les autres personnes qui pourraient lire votre code ultérieurement.
Espacement : Utilisez des espaces pour améliorer la lisibilité. Par exemple, utilisez des espaces autour des opérateurs (comme +, -, *, /) pour distinguer clairement les éléments.
Limitation de la longueur des lignes : Essayez de limiter la longueur de chaque ligne de code à environ 80 caractères.Si une ligne est trop longue, vous pouvez la diviser en plusieurs lignes en utilisant des indentations appropriées.
Utilisation de parenthèses : Utilisez des parenthèses pour regrouper les expressions complexes et améliorer la lisibilité.Cela aide également à éviter toute ambiguïté dans les opérations.
Indentation : utilisez une indentation cohérente pour améliorer la lisibilité de votre code. Généralement, l’indentation est de deux espaces ou de quatre espaces, mais l’important est de choisir une convention et de s’y tenir tout au long du code. Des exemples sont fournis à la fin du notebook, dans la partie “pour aller plus loin”.
C- Raccourcis clavier(image)
D- Fonctions qui vont être régulièrement utilées
select () mutate () filter () summarise()
E- Opérateurs
R Studio est un environnement de développement intégré (IDE) spécialement conçu pour le langage de programmation R.
Lorsque vous travaillez dans R Studio, vous pouvez utiliser différents types d’opérateurs pour effectuer des opérations mathématiques, logiques et de manipulation de données. Les exemples des opérateurs les plus courants sont développés dans la partie “pour aller plus loin”.
3. INSTALLATION ET CHARGEMENT DES LIBRAIRIES R
4. CHARGEMENT DES DONNÉES SUR LES AIRES PROTÉGÉES
L’initiative WDPA (World Database on Protected Areas) est un projet international visant à recueillir, à gérer et à diffuser des informations sur les aires protégées à travers le monde.
Cette initiative est coordonnée par l’UICN (Union internationale pour la conservation de la nature) et est soutenue par plusieurs partenaires et organisations internationales.
La base de données WDPA constitue une source d’information complète sur les aires protégées, y compris les parcs nationaux, les réserves naturelles, les sites du patrimoine mondial, les aires marines protégées et d’autres types d’espaces préservés.
Elle rassemble des données sur les limites géographiques, les statuts juridiques, les catégories de gestion, la taille, la biodiversité, les écosystèmes et d’autres caractéristiques des aires protégées.
# TÉLÉCHARGEMENT DES DONNÉES DU WDPA AVEC LE PACKAGE WDPAR
# On commence par importer les données libres d'accès, on les enregistre sur
# le disque local
if (!file.exists("data/WDPA/WDPA_Jun2023_SEN-shapefile.zip")) {
WDPA_Senegal <- wdpa_fetch("Senegal", wait = TRUE,
download_dir = "data/WDPA")
} else {
# Enregistrement serveur local
WDPA_Senegal <- wdpa_read("data/WDPA/WDPA_Jun2023_SEN-shapefile.zip")
}5. CHARGEMENT DES CONTOURS ADMINISTRATIFS
# TÉLÉCHARGEMENT DES CONTOURS ADMINISTRATIFS AVEC LE PACKAGE GEODATA
# On commence par importer les données libre d'accès, on les enregistre sur
# le disque local et on les convertit au format standardisé sf
if (!file.exists("data/GADM/gadm41_SEN_0_pk.rds")) {
contour_sen <- gadm(country = "Senegal", resolution = 1, level = 0,
path = "data/GADM") %>%
st_as_sf()
} else {
# Enregistrement serveur local
contour_sen <- read_rds("data/GADM/gadm41_SEN_0_pk.rds")
}6. EXPLORATION DES DONNÉES DISPONIBLES SUR LES AIRES PROTÉGÉES
CARACTÉRISTIQUES SPATIALES
On charge de l’information géographique, il est important de connaître les caractéristiques de base des objets à savoir :
Quels types de géométrie ? Quel système de projection ?
# CONNAÎTRE LES GÉOMÉTRIES DE LA COUCHE (POINTS, LIGNES, POLYGONES)
# On crée une colonne pour connaître la géométrie de chaque observation (mutate)
# On trie les données en fonction de leur géométrie (group_by)
# On résume l'effectif total pour chaque catégorie de géométrie (summarise).
WDPA_Senegal %>%
mutate(geom_type = st_geometry_type(.)) %>%
group_by(geom_type) %>%
summarise(n = n()) %>%
st_drop_geometry() %>%
gt() # Cette fonction sert à produire un affichage "propre| geom_type | n |
|---|---|
| MULTIPOINT | 5 |
| MULTIPOLYGON | 133 |
# CONNAÎTRE LE SYSTÈME DE PROJECTION
st_crs(WDPA_Senegal)Coordinate Reference System:
User input: WGS 84
wkt:
GEOGCRS["WGS 84",
DATUM["World Geodetic System 1984",
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["latitude",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["longitude",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4326]]
st_crs(contour_sen) == st_crs(WDPA_Senegal)[1] TRUE
CONNAÎTRE LES DONNÉES MANQUANTES
Afin d’avoir un aperçu synthétique des données manquantes, il est possible d’exécuter les commandes suivantes.
Pour rappel, la fonction gt() sert à produire de jolis tableaux. Elle arrive en fin de code, une fois qu’on a synthétisé ce que l’on veut retenir comme variables de notre tableau.
La fonction pivot_long() doit être exécutée avant d’utiliser gt() car le package traite la donnée en format “long” et non en format “large” comme c’est le cas pour le moment dans l’objet WDPA Senegal.
# CRÉER UN TABLEAU SYNTHÉTIQUE POUR AVOIR UNE VUE GLOBALE DES DONNÉES MANQUANTES
# On supprime tout d'abord la colonne des géométries pour faciliter le traitement
# On résume les données qui nous intéresse à savoir l'effectif total d'aires
# protégées, les catégories IUCN, année de création et gestionnaire
# La fonction pivot_longer permet de passer d'un format large à un format long
# Ce format est nécessaire pour créer des tableaux stylisés avec la fonction gt
# On ajoute un titre et les sources
WDPA_Senegal %>%
st_drop_geometry() %>%
summarise("Nombre total d'aires protégées" = n(),
"Catégorie IUCN manquante" = sum(IUCN_CAT == "Not Reported"),
"Année de création manquante" = sum(STATUS_YR == 0),
"Gestionnaire manquant" = sum(MANG_AUTH == "Not Reported")) %>%
pivot_longer(cols = everything(),
names_to = " ",
values_to = "Nombre d'aires") %>%
gt() %>%
tab_header("Valeurs manquantes dans les données WDPA pour le Sénégal") %>%
tab_source_note("Source : WDPA (juin 2023)")| Valeurs manquantes dans les données WDPA pour le Sénégal | |
| Nombre d'aires | |
|---|---|
| Nombre total d'aires protégées | 138 |
| Catégorie IUCN manquante | 101 |
| Année de création manquante | 97 |
| Gestionnaire manquant | 110 |
| Source : WDPA (juin 2023) | |
7. PRODUIRE DES CARTES SYNTHÉTIQUES SUR LES AIRES PROTÉGÉES
La table attributaire du WDPA est suffisamment renseignée pour pouvoir produire des cartes thématiques pour mettre en avant une variable de notre jeu de données.
Carte 1. Les différentes catégories d’aires protégées au Sénégal d’après les données satellitaires du WDPA ;
# PRODUCTION DE CARTES THÉMATIQUES ET ESTHÉTIQUES AVEC LE PACKAGE TMAP
tmap_mode(mode = "view")
tm_shape(contour_sen) +
tm_borders() +
tm_shape(WDPA_Senegal) +
tm_polygons(col = "DESIG", alpha = 0.6, title = "Catégories d'aires
protégées au Sénégal",
id = "NAME",
popup.vars = c("Type" = "DESIG",
"Catégorie IUCN" = "IUCN_CAT",
"Surface déclarée" = "REP_AREA",
"Année du statut" = "STATUS_YR"))tmap_options(check.and.fix = TRUE)8. ACQUISITION DE DONNÉES ENVIRONNEMENTALES ET CALCUL D’INDICATEURS
Le package mapme.biodiversity
Le package “mapme.biodiversity” facilite l’analyse de données statistiques sur les aires protégées partout dans le monde.
Il permet l’importation d’un nombre important de base de données et le calcul d’indicateurs associés relatifs à la biodiversité qui peuvent être utilisés pour surveiller et évaluer l’efficacité des efforts de protection.
Pour l’analyse des données géographiques, le package utilise sf pour l’exploitation des données vectorielles et terra pour les données rasters.
help(package = "mapme.biodiversity")Le package permet de calculer, via une importation de données provenant de sources open data, des indicateurs, disponibles sur des intervalles de temps réguliers pour environ deux décennies (2020-2020).
Ces indicateurs permettent aux usagers d’analyser des dynamiques spatiales et temporelles relatives aux aires protégées.
Pour connaître les ressources et les indicateurs associés disponibles :
names(available_indicators()) [1] "active_fire_counts" "active_fire_properties"
[3] "biome" "drought_indicator"
[5] "ecoregion" "elevation"
[7] "landcover" "mangroves_area"
[9] "population_count" "precipitation_chirps"
[11] "precipitation_wc" "soilproperties"
[13] "temperature_max_wc" "temperature_min_wc"
[15] "traveltime" "treecover_area"
[17] "treecover_area_and_emissions" "treecoverloss_emissions"
[19] "tri"
# LISTE DES INDICATEURS DISPONIBLES
# active_fire_counts: Calculate active fire counts based on NASA FIRMS
#polygonsactive_fire_properties: Calculate active fire properties based on
#NASA FIRMS polygons
# biome: Calculate biomes statistics (TEOW) based on WWF
# drought_indicator: Calculate drought indicator statistics
# ecoregion: Calculate terrestrial ecoregions statistics (TEOW) based on WWF
# landcover: Calculate area of different landcover classes
# mangroves_area: Calculate mangrove extent based on Global Mangrove Watch (GMW)
# population_count: Calculate population count statistics (Worldpop)
# precipitation_chirps: Calculate precipitation statistics based on CHIRPS
# precipitation_wc: Calculate precipitation statistics
# soilproperties: Calculate Zonal Soil Properties
# temperature_max_wc: Calculate maximum temperature statistics
# temperature_min_wc: Calculate minimum temperature statistics based on WorldClim
# traveltime: Calculate accessibility statistics
# treecover_area: Calculate treecover statistics
# treecover_area_and_emissions: Calculate treeloss statistics
# treecoverloss_emissions: Calculate emission statistics
# tri: Calculate Terrain Ruggedness Index (TRI) statisticsA la lecture de la liste, l’utilisateur choisit quels sont les indicateurs qui l’intéresse en fonction de ses objectifs d’analyse.
Plus de détails sur les indicateurs (source, unité, limites) sont consultables sur le site : https://mapme-initiative.github.io/mapme.biodiversity/reference/index.html
Constitution d’un portefeuille
Une fois le choix de ressources et d’indicateurs effectué, il faut d’abord initier un portefeuille de la biodiversité. Ce principe de création de porte-feuille est un traitement spécifique qu’on applique à un objet spatial sf.
- NB : Dans notre cas, pour faciliter le traitement, on va d’abord subdiviser notre objet sf() en géométries de type “polygone” avant d’appliquer la fonction init_portfolio(). L’idée est d’avoir des indicateurs pour chaque partie de l’aire protégée. Il suffira ensuite de fusionner ces polygones pour avoir des résultats globaux pour les aires protégées composées de plusieurs polygones .*
Chaque ligne de l’objet est alors considérée comme un actif unique dans le portefeuille pour lequel des indicateurs environnementaux seront calculés plus loin dans la chaîne de traitement. C’est-à-dire que le portefeuille produit des colonnes imbriquées pour chaque observation, car dans bien des cas, on peut avoir plusieurs valeurs (par année) pour une même observation, voire plusieurs variables.
Par exemple, le calcul de l’indicateur précipitations… plusieurs observations par année…
En créant le portefeuille, certaines vérifications préliminaires seront automatiquement effectuées, par exemple que le SRS de l’objet est EPSG:4326, sinon il sera transformé.
Certains paramètres globaux du portefeuille, tels que le répertoire de sortie pour les ensembles de données téléchargés, un répertoire temporaire pour les calculs intermédiaires, peuvent être définis par l’utilisateur pour avoir un contrôle plus précis du flux de travail. Cependant, ces paramètres sont également définis sur des valeurs par défaut sensibles et peuvent donc être omis lors de l’initialisation du portefeuille.
# EXÉCUTION DE LA FONCTION INIT_PORTFOLIO
# Avant de créer le porte-feuille, on filtre notre couche WDPA
# L'idée est de ne garder que les données pertinentes (années renseignées,
# et géométries de type polygone ou multi-polygone)
# Certaines aires protégées sont composées de plusieurs polygones disjoints
# On les scinde volontairement pour les traiter séparement
# Pour une analyse par AP, on pourra agréger les résultats
WDPA_mapme <- WDPA_Senegal %>%
filter(STATUS_YR != 0) %>%
filter(st_geometry_type(geometry) != "MULTIPOINT") %>%
st_cast("POLYGON")
WDPA_mapme <- init_portfolio(x = WDPA_mapme,
years = 2000:2020,
outdir = "data/mapme_Senegal",
add_resources = TRUE,
verbose = TRUE)Une fois le porte-feuille lancé, on peut récupérer les données de notre intérêt en ligne puis lancer le calcul d’indicateurs pour chaque observation de notre objet sf. Cela peut prendre un peu de temps en fonction du volume de données importées.
1- Le couvert forestier avec Global Forest Watch (GFW)
# Données de Global Forest Watch (GFW) sur le couvert forestier
WDPA_mapme <- get_resources(x = WDPA_mapme,
resources = c("gfw_treecover", "gfw_lossyear"))
if (file.exists("WDPA_mapme_foret.rds")) {
WDPA_mapme <- read_rds("WDPA_mapme_foret.rds")
} else {
# Calcul d'indicateurs GFW
progressr::with_progress({ # Ceci sert à avoir une barre de progression
# Cette commande calcule les indicateurs à partir des ressources téléchargées
WDPA_mapme <- calc_indicators(WDPA_mapme,
indicators = "treecover_area",
min_cover = 30, min_size = 1)
})
write_rds(WDPA_mapme, "WDPA_mapme_foret.rds")
}2- La surface de mangroves avec Global Mangrove Watch (GMW)
# Données de Global Mangrove Watch (GMW) sur la surface de mangroves
WDPA_mapme <- get_resources(x = WDPA_mapme,resources = "gmw")
if (file.exists("WDPA_mapme_mangrove.rds")) {
WDPA_mapme <- read_rds("WDPA_mapme_mangrove.rds")
} else {
# Calcul des indicateurs GMW
progressr::with_progress({
WDPA_mapme <- calc_indicators(WDPA_mapme,
indicators = "mangroves_area")
})
write_rds(WDPA_mapme, "WDPA_mapme_mangrove.rds")
}
# ENREGISTREMENT DES DONNÉES GFW + GMW SUR 1 FICHIER RDS
save(WDPA_mapme, file = "data/WDPA_indicators.rds") 7. TRI DES DONNÉES POUR FACILITER L’EXPLORATION
Désimbrication des indicateurs
Une fois que l’indicateur a été calculé individuellement pour tous les “actifs” du portefeuille, les données apparaîssent sous la forme d’une colonne de liste imbriquée à l’objet d’origine. Si on a plusieurs indicateurs, on aura plusieurs colonnes avec des listes ayant une, deux ou plusieurs variables.
Cette imbrication n’est pas toujours indispensable. Par exemple, pour les variables calculées ici (couvert forestier et surface de mangrove), on ne cherche qu’une valeur par observation. On va donc désimbriquer les données à l’aide de la fonction unnest().
On doit aussi se rappeler que les aires protégées sont parfois composées de plusieurs polygones disjoints et que précédemment, pour l’utilisation de mapme.biodiversity, on a calculé chaque indicateur pour chaque polygone séparément. Pour chaque aire protégée, on va donc faire la moyenne de ces indicateurs, pondérée par la surface respective de chaque polygone.
Nous appelerons ce tableau WDPA_terrain :
# DÉSIMBRICATION DES LISTES D'INDICATEURS
# On déplie les données des colonnes importées
WDPA_terrain <- WDPA_mapme %>%
unnest(c(treecover_area)) %>%
unnest(c(mangroves_area)) On obtient alors un tableau avec un nombre d’observations important pour un même polygone. Pour un espace donné, plusieurs variables sont mesurées et sur des périodes de temps différentes. Il faut donc maintenant rendre plus lisibles les données, sélectionner l’information avant de procéder à l’analyse statistique.
Sélection des variables les plus pertinentes
Nous faisons le choix de ne garder que certaines variables. Ce choix dépend directement de l’analyse statistique que nous voulons faire derrière.
# SÉLECTION DES VARIABLES PERTINENTES
WDPA_stats <- WDPA_terrain %>%
select(Nom = ORIG_NAME,
Surface = REP_AREA,
Aire_marine_terrestre = MARINE,
Mangrove_surface = mangrove_extent,
Annees_mangrove = year,
Couvert_foret = treecover,
Annees_f = years,
Categorie = DESIG,
Annee_creation = STATUS_YR) 9. EXPLORATION DES DONNÉES AIRES PROTÉGÉES COUPLÉES AUX INDICATEURS ENVIRONNEMENTAUX
Maintenant, il est possible d’explorer ces résultats en vue de les exploiter.
Nous pouvons commencer avec une analyse globale où nous cherchons par exemple à connaître l’état des indicateurs sur une année précise. Quelle est la surface moyenne de forêt et de mangrove en 2020 au sein de chaque aire protégée ?
# RÉSULTATS SUR UNE ANNÉE (2020)
# On filtre d'abord les résultats à l'aide des opérateurs pour ne garder
# que l'année 2020, on regroupe ensuite les données par Nom (pour avoir le
# résultat par aire protégée) puis on calcule la moyenne pour l'ensemble
# des polygones
WDPA_moyenne_2020 <- WDPA_stats %>%
filter(Annees_mangrove == 2020, Annees_f == 2020) %>%
group_by(Nom) %>%
summarize(Moyenne_surface_mangrove = format(mean(Mangrove_surface),
scientific = FALSE),
Moyenne_couvert_foret = mean(Couvert_foret)) Nous pouvons aussi filter nos recherches sur une aire protégée. L’idéal serait d’avoir une aire protégée où il y a de la forêt et de la mangrove. Au lieu d’appliquer ces conditions sur l’ensemble du jeu de données, afin de gagner du temps, on choisit de se focaliser sur 2019.
# RECHERCHE D'AIRE PROTÉGÉE CONTENANT DE LA MANGROVE ET DE LA FORÊT
WDPA_moyenne_2020 %>%
st_drop_geometry() %>%
filter(Moyenne_couvert_foret != 0 & Moyenne_surface_mangrove != 0) %>%
select(Nom) %>%
gt()| Nom |
|---|
| Aire Marine Protégée de Bamboung |
| Aire Marine Protégée de Kaalolaal Blouf-Fogny |
| Aire Marine Protégée de Niamone-Kalounayes |
| Aire Marine Protégée de Sangomar |
| Aire Marine Protégée du Gandoule |
| Basse-Casamance |
| Delta du Saloum |
| Kalissaye |
| Réserve Spéciale d’Oiseaux de Kalissaye |
Maintenant qu’on a obtenu la liste des aires protégées ayant de la forêt et de la mangrove, nous pouvons revenir à notre tableau précédent et nous focaliser sur une zone d’intérêt.
Exemple de la Basse-Casamance :
# ÉTAT DES INDICATEURS EN BASSE CASAMANCE
WDPA_Casamance <- WDPA_stats %>%
filter(Nom == "Basse-Casamance") On remarque alors que la superficie des aires protégées est en km² alors que les superficies des mangroves et de la forêt sont en Ha, on va donc modifier notre tableau initial pour convertir les Ha en km² et ne plus avoir d’erreur.
Cet exemple confirme l’importance de lire la documentation avant d’utiliser des données.
# CRÉATION D'UNE COLONNE SURFACE EN HA
WDPA_stats <- WDPA_stats %>%
mutate(Surface_ha = Surface * 100) %>%
select(-Surface)PRODUCTION D’UNE CARTE THÉMATIQUE SUR LE COUVERT FORESTIER PAR AIRE PROTÉGÉE
Nous souhaiterions maintenant créer une carte comme cela a déjà été fait précédemment pour mettre en avant la variable de notre choix dans les aires protégées.
Si nous commençons avec le couvert forestier, il faut d’abord créer un nouvel objet WDPA_foret qui synthétise les valeurs par année et par aire protégée.
# CARTE COUVERT FORESTIER 2020 (VOIR POUR RENOMMER COUVERT_FORET)
# On filtre les données que l'on veut présenter sur la carte, à savoir l'année
WDPA_foret_2020 <- WDPA_stats %>%
filter(Annees_f == 2020)
# On utilise les fonctionnalités du package tmap()
tm_shape(contour_sen) +
tm_borders() +
tm_shape(WDPA_foret_2020) +
tm_polygons(col = "Couvert_foret", alpha = 0.6, title = "Couvert forestier
des aires protégées en 2020 au Sénégal",
id = "Nom",
legend.format = list(big.mark = ""),
popup.vars = c("Catégorie" = "Categorie",
"Surface déclarée" = "Surface_ha",
"Année de création " = "Annee_creation"))Exemple avec de la mangrove :
# CARTE SURFACE LE MANGROVE DES AIRES PROTEGEES EN 2020
WDPA_mangrove_2020 <- WDPA_stats %>%
filter(Annees_mangrove == 2020)
tm_shape(contour_sen) +
tm_borders() +
tm_shape(WDPA_mangrove_2020) +
tm_polygons(col = "Mangrove_surface", alpha = 0.6, title = "Surface de mangrove
des aires protégées en 2020 au Sénégal",
palette = "Greens",
id = "Nom",
legend.format = list(big.mark = " "),
popup.vars = c("Catégorie" = "Categorie",
"Surface déclarée" = "Surface_ha",
"Année de création" = "Annee_creation"))